#ifndef DLL_SSE_H
#define DLL_SSE_H

#include "bbAddon.h"
#include <xmmintrin.h>

// Array operations on array
BBAEXPvoid FloatArraySetZeros( float *float_ptr, const int num_floats );

BBAEXPvoid FloatArrayAdd( float *float_ptr0, float *float_ptr1, const int num_floats );
BBAEXPvoid FloatArraySub( float *float_ptr0, float *float_ptr1, const int num_floats );
BBAEXPvoid FloatArrayMul( float *float_ptr0, float *float_ptr1, const int num_floats );
BBAEXPvoid FloatArrayDiv( float *float_ptr0, float *float_ptr1, const int num_floats );
BBAEXPvoid FloatArraySqrt( float *float_ptr, const int num_floats );
BBAEXPvoid FloatArrayMin( float *float_ptr0, float *float_ptr1, const int num_floats );
BBAEXPvoid FloatArrayMax( float *float_ptr0, float *float_ptr1, const int num_floats );

BBAEXPvoid FloatArrayEqual( float *float_ptr0, float *float_ptr1, const int num_floats );
BBAEXPvoid FloatArrayNotEqual( float *float_ptr0, float *float_ptr1, const int num_floats );
BBAEXPvoid FloatArrayLess( float *float_ptr0, float *float_ptr1, const int num_floats );
BBAEXPvoid FloatArrayLessEqual( float *float_ptr0, float *float_ptr1, const int num_floats );
BBAEXPvoid FloatArrayGreater( float *float_ptr0, float *float_ptr1, const int num_floats );
BBAEXPvoid FloatArrayGreaterEqual( float *float_ptr0, float *float_ptr1, const int num_floats );

// Float4 operations on array
BBAEXPvoid BBACALL FloatArrayAddFloat( float *float_ptr, const float scalar, const int num_floats );
BBAEXPvoid BBACALL FloatArrayMulFloat( float *float_ptr, const float scalar, const int num_floats );

#endif //DLL_SSE_H